package dp.maxsum;

public class leetcode152乘积最大子数组 {
    // 负数会让最小变最大，最大变最小
    public int maxProduct(int[] nums) {
        int length = nums.length;
        int tMax = 1, tMin = 1, max = Integer.MIN_VALUE;
        for (int i = 0; i < length; i++) {
            if (nums[i] < 0) {
                int temp = tMax;
                tMax = tMin;
                tMin = temp;
            }
            tMax = Integer.max(tMax * nums[i], nums[i]);
            tMin = Integer.min(tMin * nums[i], nums[i]);
            max = Integer.max(tMax, max);
        }
        return max;
    }
}
